package com.phoenix.jsef.demo.dao;

import com.phoenix.jsef.demo.pojo.CVwOfficeEntity;
import com.phoenix.jsef.framework.AccessComponent;
import com.phoenix.jsef.framework.EntityCollection;
import com.phoenix.jsef.framework.FillEntityHelper;
import com.phoenix.jsef.framework.PageInfo;
import com.phoenix.jsef.jdbcutils.CommandType;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

 /**   
 * @ClassName: CVwOfficeDataAccess 
 * @Description:TODO(该类提供了对商业实体：CVwOfficeEntity 对应的 数据库访问,操作的通用方法.)   
 * @author: 李启联
 * @date:   2018-1-17 15:45:31  
 * @version V1.0     
 * @Copyright: Copyright (c) 2018
 * 申明：本内容未经作者本人同意,禁止外泄以及用于其他的商业项目.
 */
@Repository
public class CVwOfficeDataAccess extends AccessComponent {
	/**
	 * 通用的搜索方法
	 * @return 返回查找到的实体对象集合
	 * @throws Exception
	 */
	public EntityCollection getCollection() throws Exception{
		return this.searchEntityCollection(CVwOfficeEntity.class);		
	}
	
	/**
	 * 通用的搜索方法
	 * @return 返回查找到的实体对象集合
	 * @throws Exception
	 */
	public List<CVwOfficeEntity> getList() throws Exception{
		return (List<CVwOfficeEntity>) this.searchEntityList(CVwOfficeEntity.class);
	}

    /**
    * 通过slq查询语句或执行存储过程,返回对应实体集合,会自动查询并填充实体里定义的其他实体对象或集合
    * @param commandType 执行类型[SQL语句或存储过程]
    * @param commandText SQL语句或存储过程名称
    * @param obj 执行参数
    * @return
    * @throws Exception
    */
    public List<CVwOfficeEntity> getListBySql(CommandType commandType, String commandText, Object... obj) throws Exception{
        return (List<CVwOfficeEntity>) super.searchEntityListBySQL(CVwOfficeEntity.class,commandType,commandText,obj);
    }

	/**
	 * 通用的搜索方法
	 * @return 返回查找到的实体对象集合的分页对象
	 * @throws Exception
	 */
	public PageInfo<CVwOfficeEntity> getPageInfo() throws Exception{
		return this.searchEntityPageInfo(CVwOfficeEntity.class);
	}
	
	/**
	 * 根据ID得到实体对象对应的 Map 
	 * @param id 主键
	 * @return 实体对象对应的 Map
	 * @throws Exception
	 */
	public Map<String,Object> getMapById(String id) throws  Exception{
		return FillEntityHelper.searchEntityById(CVwOfficeEntity.class, id);
	}
	
	/**
	 * 根据ID得到单个实体对象
	 * @param id 主键值
	 * @return 单个实体对象
	 * @throws Exception
	 */
	public CVwOfficeEntity getEntityById(String id) throws Exception{
		this.getAccessParameter().getFilter().addEqual("OFFICE_ID", id);
		return (CVwOfficeEntity) this.searchEntity(CVwOfficeEntity.class);
	}
	
	/**
	 * 将实体对象插入数据库
	 * @param entity 实体对象
	 * @return 返回成功或失败
	 * @throws Exception
	 */
	public boolean insert(CVwOfficeEntity entity) throws Exception{
		return super.insert(entity);
	}
	
	/**
	 * 将实体对象更新到数据库(支持级联更新：需要在对应实体模型对象中标记级联更新实体对象 例： cascadeUpdateEntitys={A.class,B.class})
	 * @param entity 实体对象
	 * @return 返回成功或失败
	 * @throws Exception 
	 */
	public boolean update(CVwOfficeEntity entity) throws Exception{
		return super.update(entity);
	}
	
	/**
	 * 将实体对象从数据库中删除 (支持级联删除：需要在对应实体模型对象中标记级联删除实体对象 例： cascadeDeleteEntitys={A.class,B.class})
	 * @param entity  实体对象
	 * @return 返回成功或失败
	 * @throws Exception 
	 */
	public boolean delete(CVwOfficeEntity entity) throws Exception{
		return super.delete(entity);
	}
	
	/**
	 * 单纯的根据id的值从数据库中删除一个单一实体对象
	 * @param keyValue
	 * @return
	 * @throws Exception
	 */
	public boolean deleteByIdForSingle(Object keyValue) throws Exception{
		return super.deleteByIdForSingle(CVwOfficeEntity.class,keyValue);
	}	
		
}
